<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      function Person(name,age){
        this.name = name;
        this.age = age;
      }
      Person.prototype.smile = function(){
        console.log(`${this.name} is simling...`);
      }
      Person.prototype.head = 1;
      
      var p1 = new Person('tom',18);
      p1.smile();
      var p2 = new Person('lily',18);
      p2.smile();
      
      function Student(name,age,sno){
        // 构造函数继承法，优缺点
        Person.call(this,name,age);// 每个函数都有 call 方法，有两个作用，1、改变函数内容的 this 指向；2、改变this指向后执行该函数。 apply 函数除了参数列表表现与 call 不一样，其他都一样。
        this.sno = sno;
      }
      var s1 = new Student('wang',19,'001');
      console.log(s1.name,s1.age);
      s1.smile()
      
      // 原型链继承法，优缺点
      
      // 拷贝继承法，优缺点
      
      // 空白对象继承法，优缺点
      
      // 组合继承法，优缺点
      
    </script>
  </body>
</html>
